Amazon Bedrock Knowledge bases の高度な解析オプションを試してみる

Amazon Bedrock Knowledge bases の高度な解析オプションを試してみる

LLM を利用して PDF ファイルの中身を読み解く高度な解析オプションを試してみました。表やグラフが多いファイルを読み解くのにオススメです。
Clock Icon2024.09.22

こんにちは!AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

かなり前なのですが、 Amazon Bedrock Knowledge bases に「高度な解析オプション」がリリースされました。

https://dev.classmethod.jp/articles/knowledge-bases-for-amazon-bedrock-advanced-rag-capabilities/

今回はこの機能が、どんな機能なのかを試してみたいと思います。

高度な解析オプション

まず初めに高度な解析オプションは、ドキュメントからテーブルやグラフなどの非テキスト情報を解析するオプションです。従来サポートしていなかった非テキスト情報を追加情報として認識することで回答精度の向上を目指します。

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-chunking-parsing.html#kb-advanced-parsing

ファイル形式

利用可能なファイル形式は、執筆時点で 50MB 未満の PDF 形式のみサポートしている状況です。

Each file size doesn't exceed the quota of 50 MB.
If you choose to use advanced parsing of your documents, then currently only PDF file format is supported. You must convert to or use PDF files before you can apply advanced parsing.

https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base-ds.html#kb-ds-supported-doc-formats-limits

モデル

高度な解析オプションでは、基礎モデルまたは推論プロファイルを利用して非テキスト情報を解析します。つまり、LLM を利用するということです。

利用可能なモデルは現状 Anthropic Claude 3 Sonnet と Anthropic Claude 3 Haiku をサポートしています。(Claude 3.5 Sonnet は未対応である点に注意です。)

You can use advanced parsing techniques for parsing non-textual information from documents. This feature allows you to select a foundation model or inference profile for parsing of complex data, such as tables and charts. Additionally, you can tailor this to your specific needs by overwriting the default prompts for data extraction, ensuring optimal performance across a diverse set of use cases. Currently, Anthropic Claude 3 Sonnet and Anthropic Claude 3 Haiku are supported.

LLM を使った解析オプションのため、別途モデルの実行料金がかかります。

There are additional costs to using advanced parsing. This is due to its use of a foundation model. The cost depends on the amount of data you have. See Amazon Bedrock pricing for more information on the cost of foundation models.

https://docs.aws.amazon.com/bedrock/latest/userguide/kb-chunking-parsing.html#kb-advanced-parsing

プロンプト

デフォルトでは、以下のプロンプトが解析のために利用されます。このプロンプトは上書き可能です。特定のケースはこうして欲しいなどカスタマイズできて便利ですね。

Transcribe the text content from an image page and output in Markdown syntax (not code blocks). Follow these steps:

1. Examine the provided page carefully.

2. Identify all elements present in the page, including headers, body text, footnotes, tables, visualizations, captions, and page numbers, etc.

3. Use markdown syntax to format your output:
    - Headings: # for main, ## for sections, ### for subsections, etc.
    - Lists: * or - for bulleted, 1. 2. 3. for numbered
    - Do not repeat yourself

4. If the element is a visualization
    - Provide a detailed description in natural language
    - Do not transcribe text in the visualization after providing the description

5. If the element is a table
    - Create a markdown table, ensuring every row has the same number of columns
    - Maintain cell alignment as closely as possible
    - Do not split a table into multiple tables
    - If a merged cell spans multiple rows or columns, place the text in the top-left cell and output ' ' for other
    - Use | for column separators, |-|-| for header row separators
    - If a cell has multiple items, list them in separate rows
    - If the table contains sub-headers, separate the sub-headers from the headers in another row

6. If the element is a paragraph
    - Transcribe each text element precisely as it appears

7. If the element is a header, footer, footnote, page number
    - Transcribe each text element precisely as it appears

Output Example:

A bar chart showing annual sales figures, with the y-axis labeled "Sales ($Million)" and the x-axis labeled "Year". The chart has bars for 2018 ($12M), 2019 ($18M), 2020 ($8M), and 2021 ($22M).
Figure 3: This chart shows annual sales in millions. The year 2020 was significantly down due to the COVID-19 pandemic.

# Annual Report

## Financial Highlights

* Revenue: $40M
* Profit: $12M
* EPS: $1.25


| | Year Ended December 31, | |
| | 2021 | 2022 |
|-|-|-|
| Cash provided by (used in): | | |
| Operating activities | $ 46,327 | $ 46,752 |
| Investing activities | (58,154) | (37,601) |
| Financing activities | 6,291 | 9,718 |

Here is the image.

日本語訳
画像ページからテキスト内容を書き起こし、Markdown構文(コードブロックではない)で出力してください。以下の手順に従ってください:

1. 提供されたページを注意深く確認します。

2. ページに存在するすべての要素を特定します。これには見出し、本文、脚注、表、視覚化、キャプション、ページ番号などが含まれます。

3. Markdown構文を使用して出力をフォーマットします:
    - 見出し:主見出しには#、セクションには##、サブセクションには###など
    - リスト:箇条書きには* または -、番号付きリストには1. 2. 3.
    - 繰り返しを避けてください

4. 要素が視覚化の場合
    - 自然言語で詳細な説明を提供します
    - 説明を提供した後、視覚化内のテキストを書き起こさないでください

5. 要素が表の場合
    - Markdownの表を作成し、すべての行が同じ列数を持つようにします
    - セルの配置をできるだけ忠実に維持します
    - 表を複数の表に分割しないでください
    - 結合されたセルが複数の行や列にまたがる場合、テキストを左上のセルに配置し、他のセルには ' ' を出力します
    - 列の区切りには | を使用し、ヘッダー行の区切りには |-|-| を使用します
    - セルに複数の項目がある場合、別々の行にリストします
    - 表にサブヘッダーがある場合、サブヘッダーをヘッダーから別の行で分離します

6. 要素が段落の場合
    - 各テキスト要素を表示されているとおりに正確に書き起こします

7. 要素がヘッダー、フッター、脚注、ページ番号の場合
    - 各テキスト要素を表示されているとおりに正確に書き起こします

出力例:

年間売上高を示す棒グラフ。y軸は「売上高($百万)」、x軸は「年」とラベル付けされています。グラフには2018年($12M)、2019年($18M)、2020年($8M)、2021年($22M)の棒があります。
図3:このグラフは年間売上高を百万ドル単位で示しています。2020年はCOVID-19パンデミックの影響で大幅に減少しました。

# 年次報告書

## 財務ハイライト

* 収益:$40M
* 利益:$12M
* EPS:$1.25


| | 12月31日終了年度 | |
| | 2021 | 2022 |
|-|-|-|
| キャッシュフロー:| | |
| 営業活動 | $ 46,327 | $ 46,752 |
| 投資活動 | (58,154) | (37,601) |
| 財務活動 | 6,291 | 9,718 |

ここに画像があります。

やってみる

それでは高度な解析オプションを試してみましょう。

今回は「サンプルサンプル株式会社」という、架空の会社の会社説明資料を使って PDF ファイルの解析してみます。

構成はとくにこだわりはないですが、以下で作成しました。(強いて言うなら、シンプルイズベストでしょうか)

Untitled.png

利用した Terraform のコードは以下にアップしています。

https://github.com/takakuni-classmethod/genai-blog/tree/main/knowledge_bases_advanced_parsing

リソース作成後のデータソースを確認してみます。

Parsing strategy に Claude 3 Sonnet v1 と記載されていますね。

2024-09-22 at 15.54.09-Amazon Bedrock@2x.png

いつものことながら、データソースの同期を行います。

2024-09-22 at 15.59.09-Amazon Bedrock@2x.png

うまく同期できていますね。

2024-09-22 at 16.05.42-Amazon Bedrock@2x.png

ログを確認してみる

おまちかねのログを確認してみます。

モデルの実行テスト

まず初めに、テキスト生成モデルおよび、エンべディングモデルがナレッジベース経由で実行可能かどうかをテストしていました。

テキスト生成モデルテスト.json
{
    "schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-09-22T07:01:08Z",
    "accountId": "123456789012",
    "identity": {
        "arn": "arn:aws:sts::123456789012:assumed-role/advncd-prsng-kb-role/BedrockKnowledgeBaseCPSession-G51RXHKDH3"
    },
    "region": "us-west-2",
    "requestId": "8a62ba36-35ab-49e0-a322-ea1eac6f86eb",
    "operation": "InvokeModel",
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "anthropic_version": "bedrock-2023-05-31",
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": "Bedrock Knowledge Base verifying access to requested model"
                        }
                    ]
                }
            ],
            "system": "",
            "max_tokens": 2048,
            "temperature": 0,
            "top_p": 1,
            "stop_sequences": [
                "\nObservation"
            ],
            "top_k": 50
        },
        "inputTokenCount": 18
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "id": "msg_bdrk_014f8cwYGE8muj6pEcfgixhf",
            "type": "message",
            "role": "assistant",
            "model": "claude-3-sonnet-20240229",
            "content": [
                {
                    "type": "text",
                    "text": "I do not actually have access to Bedrock's knowledge base or models. I am Claude, an AI assistant created by Anthropic to be helpful, harmless, and honest."
                }
            ],
            "stop_reason": "end_turn",
            "stop_sequence": null,
            "usage": {
                "input_tokens": 18,
                "output_tokens": 41
            }
        },
        "outputTokenCount": 41
    }
}
エンべディングモデルテスト.json
{
    "schemaType": "ModelInvocationLog",
    "schemaVersion": "1.0",
    "timestamp": "2024-09-22T07:01:11Z",
    "accountId": "123456789012",
    "identity": {
        "arn": "arn:aws:sts::123456789012:assumed-role/advncd-prsng-kb-role/BedrockKnowledgeBaseCPSession-G51RXHKDH3"
    },
    "region": "us-west-2",
    "requestId": "2ffaa3d3-e5d9-4396-9c79-a73f1082e964",
    "operation": "InvokeModel",
    "modelId": "arn:aws:bedrock:us-west-2::foundation-model/amazon.titan-embed-text-v2:0",
    "input": {
        "inputContentType": "application/json",
        "inputBodyJson": {
            "inputText": "test",
            "dimensions": 1024
        },
        "inputTokenCount": 2
    },
    "output": {
        "outputContentType": "application/json",
        "outputBodyJson": {
            "embedding": [
                -0.03696037456393242,
            ],
            "inputTextTokenCount": 2
        }
    }
}

高度な解析

続いて、高度な解析フェーズです。

複数回にわたって、以下のようなログが記録され、content に PNG 形式の base64 でエンコードされた画像ファイルを渡してモデルの推論が行われていました。

Based on the image provided, try to format the context into markdown format.(提供された画像に基づいて、コンテクストをマークダウン形式にフォーマットしてください。)と命令されていておもしろいですね。

{
	"schemaType": "ModelInvocationLog",
	"schemaVersion": "1.0",
	"timestamp": "2024-09-22T07:01:14Z",
	"accountId": "123456789012",
	"identity": {
		"arn": "arn:aws:sts::123456789012:assumed-role/advncd-prsng-kb-role/9JZCREWYXJ-DocumentLoaderTask-ef525fa8-2405-4b41-a000-783d803ea"
	},
	"region": "us-west-2",
	"requestId": "0a3434d8-84a0-4cae-a0fb-a9720a5a3caa",
	"operation": "InvokeModel",
	"modelId": "arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-3-sonnet-20240229-v1:0",
	"input": {
		"inputContentType": "application/json",
		"inputBodyJson": {
			"anthropic_version": "bedrock-2023-05-31",
			"messages": [
				{
					"role": "user",
					"content": [
						{
							"type": "text",
							"text": "Transcribe the text content from an image page and output in Markdown syntax (not code blocks). Follow these steps:\n\n1. Examine the provided page carefully.\n\n2. Identify all elements present in the page, including headers, body text, footnotes, tables, visualizations, captions, and page numbers, etc.\n\n3. Use markdown syntax to format your output:\n    - Headings: # for main, ## for sections, ### for subsections, etc.\n    - Lists: * or - for bulleted, 1. 2. 3. for numbered\n    - Do not repeat yourself\n\n4. If the element is a visualization\n    - Provide a detailed description in natural language\n    - Do not transcribe text in the visualization after providing the description\n\n5. If the element is a table\n    - Create a markdown table, ensuring every row has the same number of columns\n    - Maintain cell alignment as closely as possible\n    - Do not split a table into multiple tables\n    - If a merged cell spans multiple rows or columns, place the text in the top-left cell and output ' ' for other\n    - Use | for column separators, |-|-| for header row separators\n    - If a cell has multiple items, list them in separate rows\n    - If the table contains sub-headers, separate the sub-headers from the headers in another row\n\n6. If the element is a paragraph\n    - Transcribe each text element precisely as it appears\n\n7. If the element is a header, footer, footnote, page number\n    - Transcribe each text element precisely as it appears\n\nOutput Example:\n\nA bar chart showing annual sales figures, with the y-axis labeled \"Sales ($Million)\" and the x-axis labeled \"Year\". The chart has bars for 2018 ($12M), 2019 ($18M), 2020 ($8M), and 2021 ($22M).\nFigure 3: This chart shows annual sales in millions. The year 2020 was significantly down due to the COVID-19 pandemic.\n\n# Annual Report\n\n## Financial Highlights\n\n* Revenue: $40M\n* Profit: $12M\n* EPS: $1.25\n\n\n| | Year Ended December 31, | |\n| | 2021 | 2022 |\n|-|-|-|\n| Cash provided by (used in): | | |\n| Operating activities | $ 46,327 | $ 46,752 |\n| Investing activities | (58,154) | (37,601) |\n| Financing activities | 6,291 | 9,718 |\n\nHere is the image.\n"
						},
						{
							"type": "image",
							"source": {
								"type": "base64",
								"media_type": "image/png",
								"data": "大量の文字列"
							}
						},
						{
							"type": "text",
							"text": "\nBased on the image provided, try to format the context into markdown format.\n<context>\n会社説明資料\u2028\n\nサンプルサンプル株式会社\n</context>\n"
						}
					]
				}
			],
			"max_tokens": 2048,
			"temperature": 0,
			"top_p": 1,
			"stop_sequences": ["\nObservation"],
			"top_k": 50
		},
		"inputTokenCount": 1401
	},
	"output": {
		"outputContentType": "application/json",
		"outputBodyJson": {
			"id": "msg_bdrk_01NW6Wv5QAMXiGEYMFdQJFt9",
			"type": "message",
			"role": "assistant",
			"model": "claude-3-sonnet-20240229",
			"content": [
				{
					"type": "text",
					"text": "# サンプルサンプル株式会社\n\n## 会社説明資料"
				}
			],
			"stop_reason": "end_turn",
			"stop_sequence": null,
			"usage": {
				"input_tokens": 1401,
				"output_tokens": 25
			}
		},
		"outputTokenCount": 25
	}
}

試しに base64 の文字列をデコードして画像ファイルに変換してみました。

main.py
import base64

# base64でエンコードされたデータ(この例では省略されています)
encoded_data = "該当の文字列"

# base64デコード
decoded_data = base64.b64decode(encoded_data)

# PNGファイルとして保存
with open("output.png", "wb") as file:
    file.write(decoded_data)

print("PNGファイルが正常に保存されました。")

ある程度は予想通りだったのですが、資料の最初のスライドが作成されました。

2024-09-22 at 16.23.02-output.png — genai-blog@2x.png

このことから、高度な解析オプションは次のような仕組みで動いてそうです。

Advanced Parsing 予想図_2.png

解析結果

今回のスライドで解析された結果は次のとおりです。添付したスライドと見合わせてみると、おもしろいかもしれません。

解析結果.md
# サンプルサンプル株式会社

## 会社説明資料

# 会社概要

# 会社概要

会社名: サンプルサンプル株式会社

所在地: サンプル県サンプル市サンプル村 サンプル 1-2-3

代表: サン・プル

設立: 2010 年 04 月

従業員数: 12,345 名(グループ全体)

事業:

- 宇宙旅行事業
- AI 搭載ロボットペット事業
- 宇宙マーケティング戦略

# 柔軟な努力と最適な成果

Flexible Diligence, Optimal Results

我が社は、固定観念にとらわれない柔軟な思考と、状況に応じた適切な努力を重視します。常に変化する市場環境において、過度な労力を避けつつ、最適な成果を追求することで、持続可能な成長と従業員の幸福を両立させます。

## 行動指針

1.  臨機応変:状況を的確に判断し、柔軟に対応する
2.  効率重視:投入する労力と得られる成果のバランスを常に意識する
3.  創造的怠惰:省力化と革新的アイデアの源泉として、適度な余裕を大切にする
4.  調和の精神:仕事と生活の調和を図り、長期的な生産性向上を目指す
5.  継続的改善:小さな努力の積み重ねが大きな変化をもたらすことを信じる

# 沿革

サンプルサンプル株式会社 設立
2010 年 04 月 旅行代理店としてスタート

---

宇宙旅行事業 URZ
提供開始
2011 年 09 月

---

AI 搭載ロボットペット事業 ARPZ
提供開始
2014 年 12 月

---

宇宙マーケティング事業 UMZ 提
供開始
2020 年 04 月

# 事業内容

# URZ

## 宇宙旅行事業 (Uchu Ryokou Zigyou)

- 月面リゾート「ルナ・パラダイス」の建設
- 宇宙飛行士養成プログラムの提供
- 宇宙食の開発と販売
- FY2024 売上高:5,000 億円

# ARPZ

## AI 搭載ロボットペット事業(AI Robot Pet Zigyou)

- 感情認識 AI を搭載した「エモ・ペット」の開発
- セレブリティとのコラボレーションモデルの販売
- ロボットペット用アクセサリーの開発と販売
- FY2024 売上高:1,000 億円

# UMZ

## 宇宙マーケティング事業 (Uchu Marketing Zigyou)

- 宇宙をテーマにしたテレビ CM の放映
- 月面リゾートへの招待券付き SNS キャンペーンの実施
- AI 搭載ロボットペットの体験型ショールームの設置
- FY2024 売上高:1,000 億円

# 組織

# 社員数

The image shows a bar chart depicting the number of employees over several fiscal years. The bars are purple in color and show a consistent upward trend, with the text indicating that the number of employees exceeded 10,000 in FY2022.

The x-axis labels represent the fiscal years from FY2010 to FY2023, while the y-axis shows the employee count ranging from 0 to 12,500.

The chart is accompanied by the following text:

右肩上がりに増加
FY2022 に 10,000 人を突破

This can be translated as:

Increasing steadily
Exceeded 10,000 employees in FY2022

# 社員構成(年代別)

A pie chart showing the employee composition by age group:

| Age Group | Percentage |
| --------- | ---------- |
| 20 代     | 24.0%      |
| 30 代     | 40.0%      |
| 40 代     | 24.0%      |
| 50 代     | 8.0%       |
| 60 代以上 | 4.0%       |

# 拠点

アジア圏を中心に 8 拠点を展開

- 東京
- ソウル
- シドニー
- マレーシア
- オハイオ
- オレゴン
- カナダ
- パリ

The image shows a world map highlighting 8 locations where the company has operations or offices. The locations are listed as bullet points and include Tokyo, Seoul, Sydney, Malaysia, Ohio, Oregon, Canada, and Paris. The map uses shades of purple to indicate these locations across Asia, North America, and Europe.

# 募集要項

The image contains a header text in Chinese characters that translates to "Recruitment Information" or "Application Guidelines" in English.

# 営業職(URZ)

## 仕事内容

- 月面リゾート「ルナ・パラダイス」の利用促進
- 宇宙飛行士養成プログラムの販売

## 求める人材

- 新しい分野に挑戦する意欲がある方
- 高度な交渉力とプレゼンテーション能力を持つ方

## 応募資格

- 大卒以上
- 営業経験 3 年以上(業界不問)
- 英語でのコミュニケーション能力(TOEIC 700 点以上相当)

# エンジニア職 (URZ)

## 仕事内容

- 宇宙船および月面車両のシステム開発
- 宇宙飛行士養成プログラムの販売

## 求める人材

- 革新的な技術開発に情熱を持つ方
- 複雑な問題を解決する能力を持つ方

## 応募資格

- 理工系の学部・大学院卒業(宇宙工学、機械工学、電気電子工学、情報工学など)
- プログラミング経験 6 年以上
- 英語でのコミュニケーション能力(TOEIC 850 点以上相当)

# Flexible Diligence, Optimal Results
テーブル形式
スライド番号 内容
1 "# サンプルサンプル株式会社\n\n## 会社説明資料"
2 "# アジェンダ\n\n- 会社概要\n- 事業内容\n- 組織\n- 募集要項"
3 "# 会社概要"
4 "# 会社概要\n\n 会社名: サンプルサンプル株式会社\n\n 所在地: サンプル県サンプル市サンプル村 サンプル 1-2-3\n\n 代表: サン・プル\n\n 設立: 2010 年 04 月\n\n 従業員数: 12,345 名(グループ全体)\n\n 事業: \n* 宇宙旅行事業\n* AI 搭載ロボットペット事業\n* 宇宙マーケティング戦略"
5 "# 柔軟な努力と最適な成果\n\nFlexible Diligence, Optimal Results\n\n 我が社は、固定観念にとらわれない柔軟な思考と、状況に応じた適切な努力を重視します。常に変化する市場環境において、過度な労力を避けつつ、最適な成果を追求することで、持続可能な成長と従業員の幸福を両立させます。\n\n## 行動指針\n\n1. 臨機応変:状況を的確に判断し、柔軟に対応する\n2. 効率重視:投入する労力と得られる成果のバランスを常に意識する\n3. 創造的怠惰:省力化と革新的アイデアの源泉として、適度な余裕を大切にする\n4. 調和の精神:仕事と生活の調和を図り、長期的な生産性向上を目指す\n5. 継続的改善:小さな努力の積み重ねが大きな変化をもたらすことを信じる"
6 # 沿革\n\n サンプルサンプル株式会社 設立 \n2010 年 04 月 \n 旅行代理店としてスタート\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n 宇宙旅行事業 URZ \n 提供開始 \n2011 年 09 月\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\nAI 搭載ロボットペット事業 ARPZ \n 提供開始 \n2014 年 12 月\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n 宇宙マーケティング事業 UMZ 提 \n 供開始 \n2020 年 04 月"
7 "# 沿革\n\n サンプルサンプル株式会社 設立 \n2010 年 04 月 \n 旅行代理店としてスタート\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n 宇宙旅行事業 URZ \n 提供開始 \n2011 年 09 月\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\nAI 搭載ロボットペット事業 ARPZ \n 提供開始 \n2014 年 12 月\n\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n 宇宙マーケティング事業 UMZ 提 \n 供開始 \n2020 年 04 月"
8 "# 事業内容"
9 "# URZ\n\n## 宇宙旅行事業 (Uchu Ryokou Zigyou)\n\n* 月面リゾート「ルナ・パラダイス」の建設\n* 宇宙飛行士養成プログラムの提供\n* 宇宙食の開発と販売\n* FY2024 売上高:5,000 億円"
10 "# ARPZ\n\n## AI 搭載ロボットペット事業(AI Robot Pet Zigyou)\n\n* 感情認識 AI を搭載した「エモ・ペット」の開発\n* セレブリティとのコラボレーションモデルの販売\n* ロボットペット用アクセサリーの開発と販売\n* FY2024 売上高:1,000 億円"
11 "# UMZ\n\n## 宇宙マーケティング事業 (Uchu Marketing Zigyou)\n\n* 宇宙をテーマにしたテレビ CM の放映\n* 月面リゾートへの招待券付き SNS キャンペーンの実施\n* AI 搭載ロボットペットの体験型ショールームの設置\n* FY2024 売上高:1,000 億円"
12 "# 組織"
13 "# 社員数\n\nThe image shows a bar chart depicting the number of employees over several fiscal years. The bars are purple in color and show a consistent upward trend, with the text indicating that the number of employees exceeded 10,000 in FY2022.\n\nThe x-axis labels represent the fiscal years from FY2010 to FY2023, while the y-axis shows the employee count ranging from 0 to 12,500.\n\nThe chart is accompanied by the following text:\n\n 右肩上がりに増加 \nFY2022 に 10,000 人を突破\n\nThis can be translated as:\n\nIncreasing steadily \nExceeded 10,000 employees in FY2022"
14 "# 社員構成(年代別)\n\nA pie chart showing the employee composition by age group:\n\n | Age Group | Percentage | \n | - | - | \n | 20 代 | 24.0% | \n | 30 代 | 40.0% | \n | 40 代 | 24.0% | \n | 50 代 | 8.0% | \n | 60 代以上 | 4.0% | "
15 "# 拠点\n\n アジア圏を中心に 8 拠点を展開\n\n* 東京\n* ソウル\n* シドニー\n* マレーシア\n* オハイオ\n* オレゴン\n* カナダ\n* パリ\n\nThe image shows a world map highlighting 8 locations where the company has operations or offices. The locations are listed as bullet points and include Tokyo, Seoul, Sydney, Malaysia, Ohio, Oregon, Canada, and Paris. The map uses shades of purple to indicate these locations across Asia, North America, and Europe."
16 "# 募集要項\n\nThe image contains a header text in Chinese characters that translates to "Recruitment Information" or "Application Guidelines" in English."
17 "# 営業職(URZ)\n\n## 仕事内容\n\n* 月面リゾート「ルナ・パラダイス」の利用促進\n* 宇宙飛行士養成プログラムの販売\n\n## 求める人材\n\n* 新しい分野に挑戦する意欲がある方\n* 高度な交渉力とプレゼンテーション能力を持つ方\n\n## 応募資格\n\n* 大卒以上\n* 営業経験 3 年以上(業界不問)\n* 英語でのコミュニケーション能力(TOEIC 700 点以上相当)"
18 "# エンジニア職 (URZ)\n\n## 仕事内容\n\n* 宇宙船および月面車両のシステム開発\n* 宇宙飛行士養成プログラムの販売\n\n## 求める人材\n\n* 革新的な技術開発に情熱を持つ方\n* 複雑な問題を解決する能力を持つ方\n\n## 応募資格\n\n* 理工系の学部・大学院卒業(宇宙工学、機械工学、電気電子工学、情報工学など)\n* プログラミング経験 6 年以上\n* 英語でのコミュニケーション能力(TOEIC 850 点以上相当)"
19 "# Flexible Diligence, Optimal Results"

エンべディング

一連の画像解析が終わったのちに、エンべディングが行われます。ここはいつも通りですね。

{
	"schemaType": "ModelInvocationLog",
	"schemaVersion": "1.0",
	"timestamp": "2024-09-22T07:01:54Z",
	"accountId": "123456789012",
	"identity": {
		"arn": "arn:aws:sts::123456789012:assumed-role/advncd-prsng-kb-role/9JZCREWYXJ-TextSplitterTask-5ff00b64-4267-4f5a-ab0e-fed72630714"
	},
	"region": "us-west-2",
	"requestId": "b745dc6f-fb9d-4dc1-b205-d3b4354be942",
	"operation": "InvokeModel",
	"modelId": "arn:aws:bedrock:us-west-2::foundation-model/amazon.titan-embed-text-v2:0",
	"input": {
		"inputContentType": "application/json",
		"inputBodyJson": {
			"inputText": "# サンプルサンプル株式会社\n## 会社説明資料",
			"dimensions": 1024
		},
		"inputTokenCount": 27
	},
	"output": {
		"outputContentType": "application/json",
		"outputBodyJson": {
			"embedding": [-0.08999396115541458],
			"inputTextTokenCount": 27
		}
	}
}

検索

最後に検索してみます。

FY2022 の 20 代の人数はおおよそ何名ですか?

事実に基づいて回答が行われていますね。

文章の数が少ないのもありますが、狙い通りのチャンクを取得できています。

2024-09-22 at 17.35.55-Amazon Bedrock@2x.png

まとめ

以上、Amazon Bedrock Knowledge bases の高度な解析オプションを試してみるでした。

新しい機能が出てくる度に、ログを見ながら、内部構造探るのはとてもおもしろいですね。

このブログがどなたかの参考になれば幸いです。

AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.